/**
 * storage.js
 * 本地存储管理工具
 * 用于管理token和userId等登录信息的存储与读取
 */

const STORAGE_KEYS = {
  TOKEN: 'car_service_token',
  USER_ID: 'car_service_user_id',
  USER_INFO: 'car_service_user_info'
};

/**
 * 保存登录凭证到本地存储
 * @param {string} token - 登录token
 * @param {string} userId - 用户ID
 */
export const saveLoginInfo = (token, userId) => {
  try {
    uni.setStorageSync(STORAGE_KEYS.TOKEN, token);
    uni.setStorageSync(STORAGE_KEYS.USER_ID, userId);
  } catch (e) {
    console.error('保存登录信息失败:', e);
    throw new Error('保存登录信息失败');
  }
};

/**
 * 获取登录token
 * @returns {string|null} token值或null
 */
export const getToken = () => {
  try {
    return uni.getStorageSync(STORAGE_KEYS.TOKEN);
  } catch (e) {
    console.error('获取token失败:', e);
    return null;
  }
};

/**
 * 获取用户ID
 * @returns {string|null} 用户ID或null
 */
export const getUserId = () => {
  try {
    return uni.getStorageSync(STORAGE_KEYS.USER_ID);
  } catch (e) {
    console.error('获取用户ID失败:', e);
    return null;
  }
};

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export const isLoggedIn = () => {
  return !!getToken() && !!getUserId();
};

/**
 * 清除登录信息
 */
export const clearLoginInfo = () => {
  try {
    uni.removeStorageSync(STORAGE_KEYS.TOKEN);
    uni.removeStorageSync(STORAGE_KEYS.USER_ID);
    uni.removeStorageSync(STORAGE_KEYS.USER_INFO);
  } catch (e) {
    console.error('清除登录信息失败:', e);
  }
};

/**
 * 保存用户信息
 * @param {Object} userInfo - 用户信息对象
 */
export const saveUserInfo = (userInfo) => {
  try {
    uni.setStorageSync(STORAGE_KEYS.USER_INFO, JSON.stringify(userInfo));
  } catch (e) {
    console.error('保存用户信息失败:', e);
  }
};

/**
 * 获取用户信息
 * @returns {Object|null} 用户信息对象或null
 */
export const getUserInfo = () => {
  try {
    const userInfoStr = uni.getStorageSync(STORAGE_KEYS.USER_INFO);
    return userInfoStr ? JSON.parse(userInfoStr) : null;
  } catch (e) {
    console.error('获取用户信息失败:', e);
    return null;
  }
};

export default {
  saveLoginInfo,
  getToken,
  getUserId,
  isLoggedIn,
  clearLoginInfo,
  saveUserInfo,
  getUserInfo
};